from typing import List

class Solution:
    def merge(self, nums1, m, nums2, n) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        # 初始化三个指针
        p1 = m - 1  # nums1的最后一个有效元素
        p2 = n - 1  # nums2的最后一个元素
        p = m + n - 1  # 要填入的位置
        
        # 从后向前比较并填充较大的数
        while p2 >= 0:
            if p1 < 0 or nums2[p2] >= nums1[p1]:
                nums1[p] = nums2[p2]
                p2 -= 1
            else:
                nums1[p] = nums1[p1]
                p1 -= 1
            p -= 1


def test_merge():
    solution = Solution()
    
    # 测试用例 1: 常规情况
    print("测试用例 1:")
    nums1_1 = [1, 2, 3, 0, 0, 0]
    nums2_1 = [2, 5, 6]
    print("合并前:")
    print(f"nums1 = {nums1_1}")
    print(f"nums2 = {nums2_1}")
    solution.merge(nums1_1, 3, nums2_1, 3)
    print(f"合并后: {nums1_1}\n")

    # 测试用例 2: nums1 为空
    print("测试用例 2:")
    nums1_2 = [0]
    nums2_2 = [1]
    print("合并前:")
    print(f"nums1 = {nums1_2}")
    print(f"nums2 = {nums2_2}")
    solution.merge(nums1_2, 0, nums2_2, 1)
    print(f"合并后: {nums1_2}\n")

    # 测试用例 3: nums2 为空
    print("测试用例 3:")
    nums1_3 = [1]
    nums2_3 = []
    print("合并前:")
    print(f"nums1 = {nums1_3}")
    print(f"nums2 = {nums2_3}")
    solution.merge(nums1_3, 1, nums2_3, 0)
    print(f"合并后: {nums1_3}\n")

    # 测试用例 4: 有重复元素
    print("测试用例 4:")
    nums1_4 = [1, 2, 2, 0, 0, 0]
    nums2_4 = [1, 2, 3]
    print("合并前:")
    print(f"nums1 = {nums1_4}")
    print(f"nums2 = {nums2_4}")
    solution.merge(nums1_4, 3, nums2_4, 3)
    print(f"合并后: {nums1_4}")


if __name__ == "__main__":
    test_merge()
        

